import pandas as pd  
import numpy as np  
from sklearn.model_selection import train_test_split  
from sklearn.ensemble import RandomForestClassifier  
  
# 从CSV文件中读取数据，并设置列名  
wine_data = pd.read_csv('data.csv', header=None, names=['带钢厚度', '带钢宽度', '碳含量', '硅含量', '带钢速度', '加热炉温度', '均热炉温度', '缓冷炉温度', '过时效炉温度', '快冷炉温度', '淬火炉温度', '平整机张力', '硬度'])  
  
# 检查并处理非数值型数据  
wine_data = wine_data.apply(pd.to_numeric, errors='coerce')  
  
# 检查硬度列中的NaN值  
if wine_data['硬度'].isnull().any():  
    # 您可以选择填充NaN值，例如使用均值、中位数或众数  
    # 这里我们使用均值作为示例  
    wine_data['硬度'].fillna(wine_data['硬度'].mean(), inplace=True)  
  
# 确保没有NaN值  
#assert not wine_data.isnull().values.any(), "数据中仍存在NaN值"  
  
# 划分特征和目标变量  
x = wine_data.iloc[:, :-1].values  # 所有列除了最后一列  
y = wine_data.iloc[:, -1].values  # 最后一列  
  
# 划分训练集和测试集  
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=0)  
  
# 使用随机森林模型  
forest = RandomForestClassifier(n_estimators=10000, random_state=0, n_jobs=-1)  
forest.fit(x_train, y_train)  
  
# 获取特征重要性  
importances = forest.feature_importances_  
indices = np.argsort(importances)[::-1]  
  
# 打印特征重要性  
for f in range(x_train.shape[1]):  
    print("%2d) %-*s %f" % (f + 1, 30, wine_data.columns[indices[f]], importances[indices[f]]))